Completed
Push — master ( 3953e9...fad0bf )
by Alejandro
15s queued 11s
created

.renderServers   A

Complexity

Conditions 3

Size

Total Lines 26
Code Lines 23

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 11
CRAP Score 3.0052

Importance

Changes 0
Metric Value
eloc 23
dl 0
loc 26
rs 9.328
c 0
b 0
f 0
ccs 11
cts 12
cp 0.9167
cc 3
crap 3.0052
1
import { isEmpty, values } from 'ramda';
2
import React from 'react';
3
import { DropdownItem, DropdownMenu, DropdownToggle, UncontrolledDropdown } from 'reactstrap';
4
import PropTypes from 'prop-types';
5
import { serverType } from './prop-types';
6
7 1
const propTypes = {
8
  servers: PropTypes.object,
9
  selectedServer: serverType,
10
  history: PropTypes.shape({
11
    push: PropTypes.func,
12
  }),
13
};
14
15 1
const ServersDropdown = (serversExporter) => {
16 4
  const ServersDropdownComp = ({ servers, selectedServer, history }) => {
17 5
    const serversList = values(servers);
18 5
    const loadServer = (id) => history.push(`/server/${id}/list-short-urls/1`);
19
20 5
    const renderServers = () => {
21 5
      if (isEmpty(serversList)) {
22 1
        return <DropdownItem disabled><i>Add a server first...</i></DropdownItem>;
23
      }
24
25 4
      return (
26
        <React.Fragment>
27
          {serversList.map(({ name, id }) => (
28 12
            <DropdownItem key={id} active={selectedServer && selectedServer.id === id} onClick={() => loadServer(id)}>
29
              {name}
30
            </DropdownItem>
31
          ))}
32
          <DropdownItem divider />
33
          <DropdownItem className="servers-dropdown__export-item" onClick={() => serversExporter.exportServers()}>
34
            Export servers
35
          </DropdownItem>
36
        </React.Fragment>
37
      );
38
    };
39
40 5
    return (
41
      <UncontrolledDropdown nav inNavbar>
42
        <DropdownToggle nav caret>Servers</DropdownToggle>
43
        <DropdownMenu right>{renderServers()}</DropdownMenu>
44
      </UncontrolledDropdown>
45
    );
46
  };
47
48 4
  ServersDropdownComp.propTypes = propTypes;
49
50 4
  return ServersDropdownComp;
51
};
52
53
export default ServersDropdown;
54